package andy.demo.xml;

import java.io.IOException;
import java.io.InputStream;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import andy.demo.data.BGSNotifyNotification;
import andy.demo.data.NotifyBase;

/**
 * @author wangdw
 */
public class NotifyParser extends XmlDomParser<NotifyBase> {

    public NotifyParser(InputStream is) {
        super(is);
    }

    public NotifyParser(String fileName) {
        super(fileName);
    }

    /**
     * The main parse method.
     * 
     * @throws Exception
     * @throws IOException
     * @throws SAXException
     */
    public NotifyBase parse() throws SAXException, IOException, XmlException {

        domParser.parse(getInputSource());
        Document doc = domParser.getDocument();

        NotifyBase notify = null;
        Element documentTag = doc.getDocumentElement();

        

        if (documentTag.hasAttribute("type")) {
            
            String type = documentTag.getAttribute("type");
            NotifyBase.DisplayType disType = NotifyBase.getDisplayType(type);
            
            if (NotifyBase.DisplayType.NOTIFICATION == disType) {
                notify = doNotificationParse(documentTag, type);
            } else if (NotifyBase.DisplayType.DIALOG == disType) {
                // TODO:对话框
            } else {
                throw new XmlException("xml格式错误-->type的值不对");
            }
            
        } else {
            throw new XmlException("xml格式错误-->无type");
        }
        
 

        return notify;

    }

    /*
    <notifyItem type="1">
        <id>MSG1369281394960</id>
        <title>你附近的【toolnv】对你说11111111111111111111111111111111111111111111111</title>
        <icon>http://pd.youyuan.com/resize/photo/n/y/n/120/150/201206/30/13/24/1341033898608.jpg</icon>
        <notification>
            <txt>xxxxxxxxx22222222222222222222222222222222222222222222222222222</txt>
            <url>sea_me_stat.jwml?uid=86119829</url>
        </notification>
    </notifyItem>
     * */
    public NotifyBase doNotificationParse(Element documentTag, String type){
        BGSNotifyNotification notify = new BGSNotifyNotification();
        notify.type = type;
        
        NodeList list = documentTag.getChildNodes();
        int len = list.getLength();
        
        for (int i = 0; i < len; i++) {
            Node node = list.item(i);

            if (node.getNodeType() == Node.ELEMENT_NODE){
                Element tag = (Element) node;
                if ("id".equals(tag.getTagName())){
                    notify.id = tag.getTextContent();
                } else if ("title".equals(tag.getTagName())){
                    notify.title = tag.getTextContent();
                } else if ("icon".equals(tag.getTagName())) {
                    notify.icon = tag.getTextContent();
                } else if ("pos".equals(tag.getTagName())) {
                    notify.pos = tag.getTextContent();
                } else if ("notification".equals(tag.getTagName())) {
                    doNotificationSubParse(tag, notify);
                }
            }
        }
        return notify;
    }

    public void doNotificationSubParse(Element documentTag, BGSNotifyNotification notify){

        NodeList list = documentTag.getChildNodes();
        int len = list.getLength();
        
        for (int i = 0; i < len; i++) {
            Node node = list.item(i);

            if (node.getNodeType() == Node.ELEMENT_NODE){
                Element tag = (Element) node;
                if ("txt".equals(tag.getTagName())){
                    notify.notification.txt = tag.getTextContent();
                } else if ("url".equals(tag.getTagName())){
                    notify.notification.url = tag.getTextContent();
                } 
            }
        }
    }
    
    // public NotifyBase parse() throws SAXException, IOException, Exception {
    //
    // domParser.parse(this.getInputSource());
    //
    // Document doc = domParser.getDocument();
    //
    // NotifyBase notify = new NotifyBase();
    //
    // // NamedNodeMap attrs = doc.getAttributes();
    // //
    // // for (iterable_type iterable_element : attrs) {
    // //
    // // }
    //
    // // System.out.println(doc.getNodeName());//ok--->#document
    // // System.out.println(doc.getTextContent());//ok--->null
    // // System.out.println(doc.getNodeValue());//ok--->null
    // // System.out.println(doc.getXmlEncoding());//ok--->utf-8
    // // System.out.println(doc.getDoctype());//ok--->null
    // // System.out.println(doc.getDocumentElement());//ok--->[notifyItem:
    // null]
    // System.out.println(doc.getNodeType());//ok--->9//"DOCUMENT_NODE"
    // System.out.println(doc.getDocumentElement().getNodeType());//ok--->1
    // //
    // System.out.println(doc.getDocumentElement().hasAttributes());//ok--->true
    // //
    // System.out.println(doc.getDocumentElement().hasAttribute("type"));//ok--->true
    // //
    // System.out.println(doc.getDocumentElement().getAttribute("type"));//ok--->1
    // //
    // System.out.println(doc.getDocumentElement().getNodeName());//ok--->notifyItem
    // //
    // System.out.println(doc.getDocumentElement().getNodeValue());//ok--->null
    // //
    // System.out.println(doc.getDocumentElement().getTagName());//ok--->notifyItem//getTagName()方法是Element接口中的方法，getNodeName()方法是Element接口从Node接口继承的方法。对于Element节点，getTagName()和getNodeName()返回的都是Element节点对应的XML文件中标记的名称。
    //
    // //
    // System.out.println(doc.getDocumentElement().getChildNodes().getLength());//ok--->11
    // //
    // System.out.println(doc.getDocumentElement().getFirstChild());//ok--->[#text:
    // ]//因为有回车换行
    // //
    // System.out.println(doc.getDocumentElement().getFirstChild().getNodeName());//ok--->#text:
    // //
    // System.out.println(doc.getDocumentElement().getFirstChild().getNodeValue());//ok--->#text:
    // // NodeList l = doc.getDocumentElement().getChildNodes();
    // // int len = l.getLength();
    // // for (int i=0; i<len; i++) {
    // // System.out.println(l.item(i).getTextContent());//ok--->
    // // }
    //
    // System.out.println(doc.getDocumentElement().getElementsByTagName("url").getLength());//ok--->2
    //
    // NodeList l = doc.getDocumentElement().getElementsByTagName("url");
    // int len = l.getLength();
    // for (int i=0; i<len; i++) {
    // System.out.println(l.item(i).getTextContent());//ok--->
    // // aa.jwml
    // // sea_me_stat.jwml?uid=86119829
    // System.out.println(l.item(i).getNodeType());//ok--->1
    //
    // }
    //
    // //
    // System.out.println(doc.getDocumentElement().hasChildNodes());//ok--->true
    //
    // NodeList l1 = doc.getChildNodes();
    // NodeList l2 = doc.getElementsByTagName("notifyItem");
    // return notify;
    //
    //
    // }
}
